//  原游戏规则:
//  班级中玩一个游戏，所有学生围成一圈，从某位同学手里开始向旁边的同学传一束花。
//  这个时候某个人(比如班长)，在击鼓，鼓声停下的一颗，花落在谁手里，谁就出来表演节目。
// ◼ 修改游戏规则:
//  我们来修改一下这个游戏规则。
//  几个朋友一起玩一个游戏，围成一圈，开始数数，数到某个数字的人自动淘汰。
//  最后剩下的这个人会获得胜利，请问最后剩下的是原来在哪一个位置上的人 ?
// ◼ 封装一个基于队列的函数:
//  参数:所有参与人的姓名，基于的数字;
//  结果: 最终剩下的一人的姓名;

import ArrayQueue from './01.基于数组实现队列';

function hotPotato(nameLists: string[], num: number): string {
  if (nameLists.length === 0) return;
  const queue = new ArrayQueue<string>();

  for (let i = 0; i < nameLists.length; i++) {
    queue.enqueue(nameLists[i]);
  }

  while (queue.size > 1) {
    // num之前的人出队列再入队
    for (let i = 0; i < num; i++) {
      const name = queue.dequeue();
      if (name) queue.enqueue(name);
    }
    // 淘汰 => 出队列
    queue.dequeue();
  }
  // 取出最后一个人的名字
  const lastName = queue.dequeue();
  return `数到${num}就淘汰,最终剩下的人是${lastName}`;
}

console.log(hotPotato(['小红', '小绿', '小蓝', '小张', '小赵'], 3));
